package com.example.liaotian.view;

import android.content.Context;
import android.graphics.PointF;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;

public class SubVIewPager extends ViewPager {
    //页面切换的时间
    private long delayTime = 1500;



    /**
     * 修改页面切换时间的方法
     * @param delayTime
     */
    public void setDelayTime(long delayTime){
        this.delayTime = delayTime;
    }

    public SubVIewPager(@NonNull Context context) {
        this(context,null );
    }

    public SubVIewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        setOnTouchListener(new OnTouchListener() {
            //屏幕点击监听
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                int action = motionEvent.getAction();
                switch (action){
                    //手指按下时
                    case MotionEvent.ACTION_DOWN:
                        getParent().requestDisallowInterceptTouchEvent(true);
                        stopLooper();
                        break;
                    //手指离开时
                    case MotionEvent.ACTION_UP:

                        starLooper();
                        break;

                }

                return false;
            }
        });
    }


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case  MotionEvent.ACTION_MOVE:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     *当view被显示时加载此方法
     *这里用于页面不被显示时停止view线程的停止
     */
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        starLooper();
    }

    /**
     * 加载线程
     * postDelayed的作用是延迟多少毫秒后开始运行
     */
    private void starLooper() {
       postDelayed(Task,delayTime);

    }
    /**postDelayed的作用是延迟多少毫秒后开始运行
     * 创建一个每1.5秒切换一次页面的线程
     * 创建一个为当前页面序号的值，然后每1.5秒+1一次设置为当前页面实现页面的切换
     */
    private Runnable Task =  new Runnable() {
        @Override
        public void run() {
            int currentTtem = getCurrentItem();
            currentTtem++;
            setCurrentItem(currentTtem);
            postDelayed(this,delayTime);
        }
    };

    /**
     *当view被销毁时加载此方法
     *这里用于页面不被显示时停止view线程的停止
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        stopLooper();
    }

    /**
     * 删除线程
     *removeCallbacks方法是删除指定的Runnable对象
     */
    private void stopLooper() {
       removeCallbacks(Task);
    }
}
